[急!!!]c语言题目,发闷中……

来源:百度知道 编辑:UC知道 时间:2024/06/21 09:27:16
若有以下定义和语句,下列操作正确的是
struct s
{
int i1;
struct s *i2,*i0;
};
static struct s a[3]={2,&a[1],'\0',4,&a[2],&a[0],6,'\0',&a[1]},*ptr;
ptr=a;

A ptr→i1++
B *ptr→i2
C ++ptr→i0
D *ptr→i1

这题题目我看不懂,要求我们做什么不清楚,无从下手,答案是A,
麻烦给我详细解答下,每个答案都帮我理下,谢谢(*^_^*)
箭头是一楼说的那个,我手机发的问题,打不出来。不好意思

这个是判断下列选项可以执行的
A ptr→i1++ 对的,不解释了
B *ptr→i2 这个等于(*ptr)→i2优先级问题*ptr表示结构取值用.不是->
C ++ptr→i0 这个求&a[0]的地址没意义的
D *ptr→i1 这个*ptr.i1 因为是结构体的成员
这个是个循环的链表不知道你学过数据结构没

首先判断优先级与结合性
->优先级高于*与++,*与++优先级相同且右结合性
A 取ptr所指内容(A[0])的i1成员,把结果后自增,结果为整型2,正确
B 取ptr所指i2成员(&A[1]),取其内容即A[1],结果为{4,&a[2],&a[0]},没错,只是是个struct s型的
C 取ptr所指i2成员('\0'),前自增后,其值为sizeof(struct s),并返回这个值
语法上并没有错,只是实际没意义
D 取ptr所指i1成员,是个整型,取内容,错误

你写的箭头应该是这个符号吧:->
这是“指向结构体成员运算符”,ptr->i等价于(*ptr).i